# module getopt -- Fonctions standard de traitement de la ligne de commande.

# La fonction getopt.getopt() possède une interface différente de celle de la
# fonction Unix getopt() mais elle offre les mêmes fonctionnalités que cette
# dernière.

# Cette fonction admet deux arguments : le premier est généralement argv[1:]
# (cette fonction ne veut pas du nom du script) et le deuxième est une chaîne
# d'options du même style que celle qu'on passe à la fonction getopt() d'Unix
# (à savoir une chaîne des lettres autorisées en tant qu'options, les options
# nécessitant un argument étant suivies d'un caractère deux-points).

# La fonction déclenche l'exception getopt.error (avec un argument) si elle
# détecte une erreur.

# Elle renvoie deux éléments :
# (1)   une liste de paires (option, argument_option) qui précise les options
#   passées à la commande, dans l'ordre où elles apparaissent. (J'aurai bien
#   utilisé un dictionnaire mais certaines applications pourraient se comporter
#   différemment en fonction de l'ordre des options sur la ligne de commande,
#   ou agir spécialement si une option apparaît plusieurs fois.) Les options
#   de type booléen ont pour argument_option la chaîne vide ''.
# (2)   la liste des arguments restants (peut être vide)

error = 'erreur de getopt'

def getopt(args, options):
    list = []
    while args and args[0][0] = '-' and args[0] <> '-':
    	if args[0] = '--':
    	    args = args[1:]
    	    break
    	optstring, args = args[0][1:], args[1:]
    	while optstring <> '':
    	    opt, optstring = optstring[0], optstring[1:]
    	    if classify(opt, options): # Peut aussi déclencher une exception
    	    	if optstring = '':
    	    	    if not args:
    	    	    	raise error, 'l\'option -' + opt + ' nécessite un argument'
    	    	    optstring, args = args[0], args[1:]
    	    	optarg, optstring = optstring, ''
    	    else:
    	    	optarg = ''
    	    list.append('-' + opt, optarg)
    return list, args

def classify(opt, options): # Un assistant permettant de vérifier le type d'une
                            # option
    for i in range(len(options)):
	if opt = options[i] <> ':':
	    return options[i+1:i+2] = ':'
    raise error, 'option -' + opt + ' non-reconnue'
